﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>


//变种水仙花

//int main()
//{
//	int i = 0;
//	int j = 0;
//	for (i = 10000; i < 100000; i++)
//	{
//		int sum = 0;
//		for (j = 10000;j; j /=10)
//		{
//			sum += (i / j) * (i % j);
//		}
//		if (sum == i)
//		{
//			printf("%d ", sum);
//		}
//	}
//	return 0;
//}

//序列中删除指定数字
//#include <stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[n];
//	for (int i = 0; i < n; i++)
//	{
//		scanf("%d ", &arr[i]);
//	}
//	int num = 0;
//	scanf("%d", &num);
//	for (int j = 0; j < n; j++)
//	{
//		if (arr[j] != num)
//		{
//			printf("%d ", arr[j]);
//		}
//	}
//	return 0;
//}


//使用联合体判断大小端
int check1()
{
	union un
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;
}

int check2()
{
	int i = 1;
	return *(char*)&i;
}

int main()
{
	int ret1 = check1();
	int ret2 = check2();

	if (ret1 == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}

	if (ret2 == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}



















//int main()
//{
//    unsigned char puc[4];
//    struct tagPIM
//    {
//        unsigned char ucPim1;
//        unsigned char ucData0 : 1;
//        unsigned char ucData1 : 2;
//        unsigned char ucData2 : 3;
//    }*pstPimData;
//    pstPimData = (struct tagPIM*)puc;
//    memset(puc, 0, 4);
//    pstPimData->ucPim1 = 2;
//    pstPimData->ucData0 = 3;
//    pstPimData->ucData1 = 4;
//    pstPimData->ucData2 = 5;
//    printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
//    return 0;
//}

//int check()
//{
//	union
//	{
//		int i;
//		char c;
//	}un;
//	un.i = 1;
//	return un.c;
//}
//
//int main()
//{
//	int ret = check();
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}

// 自定义类型：联合和枚举

// 1.联合体

// 1.1 联合体类型的声明

// 【1】可以有一个或者多个成员构成，成员可以是不同的类型

// 【2】编译器只为最大的成员分配足够的空间，所有成员共用一块内存空间，联合体也称共用体

// 【3】因为共用一块空间，所以给一个成员赋值时，其他成员的值也会变化

// 【4】共用空间的变量不要一起使用
#if 0
union Un
{
	char c;
	int i;
};

int main()
{
	union Un s = { 0 };
	printf("%d", sizeof(s)); //4
	return 0;
}
#endif

//联合体的特点

#if 0
//代码1
#include <stdio.h>
//联合类型的声明
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	// 下⾯输出的结果是⼀样的吗？
	printf("%p\n", &(un.i));
	printf("%p\n", &(un.c));
	printf("%p\n", &un);
	return 0;
}
#endif

#if 0
//代码2
#include <stdio.h>
//联合类型的声明
union Un
{
	char c;
	int i;
};
int main()
{
	//联合变量的定义
	union Un un = { 0 };
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%x\n", un.i); //小端存储
	return 0;
}
#endif